package objetos.armas;

import java.util.Random;
import juego.Escenario;
import objetos.ObjetoMovil;
import objetos.proyectiles.*;
import org.jdom.Element;

/*
 * Esta clase es una clase intermedia entre el disparar del Enemigo y las armas. 
 * Se encarga de gestionarlas, y de decidir que arma disparar.
 */
public class CuartoArmas {
	private LaserCannon laser;
	private Torpedera torpedera;
	private Cohetera cohetera;
	private ObjetoMovil base;

	public CuartoArmas(ObjetoMovil base) {
		this.base = base;
		this.laser = new LaserCannon(this.base, false);
		this.cohetera = new Cohetera(this.base, 0);
		this.torpedera = new Torpedera(this.base, 0, 0, 0);
	}

	public Proyectil disparar() {
		Random rdm = new Random();
		int num = rdm.nextInt(5);

		switch (num) {
		case 0:
			return this.getTorpedera().dispararAdaptable();
		case 1:
			Rastreador bala = this.getTorpedera().dispararRastreador();
			if (bala != null) {
				bala.setObjetivo(Escenario.getInstance().darObjetivoPara(
						this.base));
			}
			return bala;
		case 2:
			return this.getTorpedera().dispararTorpedo();
		case 3:
			return this.getCohetera().disparar();
		case 4:
			return this.getLaser().disparar();
		default:
			return this.disparar();
		}
	}

	public void activarLaser() {
		this.getLaser().setActivo(true);
	}

	public void cargarTorpedos(int cant) {
		this.getTorpedera().recargar(cant);
	}

	public void cargarRastreadores(int cant) {
		this.getTorpedera().recargarRastreador(cant);
	}

	public void cargarCohetes(int cant) {
		this.getCohetera().recargar(cant);
	}

	public void cargarAdaptables(int cant) {
		this.getTorpedera().recargarAdaptables(cant);
	}

	public LaserCannon getLaser() {
		return laser;
	}

	public void setLaser(LaserCannon laser) {
		this.laser = laser;
	}

	public Torpedera getTorpedera() {
		return torpedera;
	}

	public void setTorpedera(Torpedera torpedera) {
		this.torpedera = torpedera;
	}

	public Cohetera getCohetera() {
		return cohetera;
	}

	public void setCohetera(Cohetera cohetera) {
		this.cohetera = cohetera;
	}

	public ObjetoMovil getBase() {
		return base;
	}

	public void setBase(ObjetoMovil base) {
		this.base = base;
		this.torpedera.setBase(base);
		this.cohetera.setBase(base);
		this.laser.setBase(base);
	}

	/* Persistencia */

	/* Instancia a partir de NodoXML */
	public CuartoArmas(Element nodo) {
		this.base = null;
		this.cohetera = new Cohetera(nodo.getChild("cohetera"));
		this.torpedera = new Torpedera(nodo.getChild("torpedera"));
		this.laser = new LaserCannon(nodo.getChild("laserCannon"));
	}

	/* NodoXML a partir de instancia */
	public Element obtenerNodo() {
		Element nodo = new Element("cuartoArmas");
		nodo.addContent(this.getCohetera().obtenerNodo());
		nodo.addContent(this.getLaser().obtenerNodo());
		nodo.addContent(this.getTorpedera().obtenerNodo());
		return nodo;
	}

}
